package com.kfm.base.reflect;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class Demo06 {

    public static void main(String[] args) {
        /*
          内省(xing)机制，是 Java语言对JavaBean类属性、事件的一种缺省处理方法。
          我们可以通过反射机制去操作这些属性方法，比如说获取属性值，调用set方法赋值等等。
          set/get/is方法都是内省机制的一种体现。
         */
        // 1. 获取类的 class 对象
        Class<Student> cla = Student.class;
        try {
            // 2. 创建PropertyDescriptor对象
            PropertyDescriptor name = new PropertyDescriptor("name", cla);

            // 3. 获取属性的 set/get 方法
            Method writeMethod = name.getWriteMethod();
            Method readMethod = name.getReadMethod();

            // 创建对象
            Constructor<Student> declaredConstructor = cla.getDeclaredConstructor();
            declaredConstructor.setAccessible(true);

            Student student = declaredConstructor.newInstance();

            writeMethod.invoke(student, "张三");

            System.out.println(readMethod.invoke(student));

        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}
